Управление любыми приборами поддерживающие протокол DMX-512 при помощи веб-интерфейса и telegram-бота
===
### Описание
1. Проект написан на языке Python. 
2. Возможность управлять приборами через веб-интерфейс в ручном режиме с расширенным функционалом: \
a) управление каждым прибором по отдельности; \
b) сохранение пресетов (создание сцен); \
с) создание бэкапа настроек и быстрое восстановление рабочей конфигурации.
3. Полное обеспечение сложных динамических эффектов с возможностью управления  в онлайн режиме. 
4. Без знания языка программирования позволяет осуществить запуск Telegram-бота. И дает возможность через Telegram вызывать пресеты из любой точки земного шара.
5. Встроенный API позволяет создать свое устройство или написать приложение для вызова пресетов.
6. Логирование действий пользователя в системе

### Системные требования
* Операционная система Debian или Ubuntu
* nginx
* Python3
* pip3
* git

### Python модули
* Flask 2.1.2 или выше
* Flask-WTF 1.0.1 или выше
* WTForms 3.0.1 или выше
* Jinja2 3.1.2 или выше
* Pyserial 3.5 или выше
* Dmx485 1.2.1 или выше
* Aiogram 2.22.2 или выше

### Установка на чистую ОС
1. `apt install git`
2. `git clone https://github.com/vshomenet/vavt-dmx-control.git`
3. `cd vavt-dmx-control` 
4. `./install.sh`

###  Настройка Telegram-бота
1. Зарегистрировать бота через `@BotFather` и получить токен.
2. В веб-интерфейсе зайти в раздел "Telegram" и сохранить полученный токен.
3. После добавления токена, через 5-10 секунд в разделе "Обслуживание", убедиться в отсутствии ошибки "Service dmx-telegram not started".
4. Отправить команду `/id` боту и узнать свой ID или через раздел "Помощь" в боте.
5. В веб-интерфейсе в меню "Telegram" добавить свой ID в раздел "Пользователи telegram-бота". Только добавленные пользователи имеют возможность управлять пресетами.
6. После добавления новых пресетов в веб-интерфейсе, необходимо сделать рестарт всех сервисов.

### Сброс пароля в веб-интерфейсе
Подключиться к серверу по ssh или локально в терминале:
1. Перейти в каталог /opt/dmx \
`cd /opt/dmx`
2. Запустить скрипт reset_pass.py \
`./reset_pass.py` 

### Переходник USB to DMX-512
* Схему сборки переходника можно посмотреть [здесь](circuit_diagram)

### API - примеры
* Получение информации от сервера
1. `curl -i http://my_domain/api/v1/dmx/all` - получить полную информацию о сервере
2. `curl -i http://my_domain/api/v1/dmx/device` - получить список всех устройств \
и т.д.\
В ответ на запросы, сервер вернет json файл.
* Отправка команд серверу\
`curl -H "Content-Type: application/json" -X POST -d @my_file.json http://my_domain/api/v1/dmx` - команда для отравки json файла
* Формат передаваемого json файла
```rb
{
 "login": "my_login", 
 "pass": "my_password", 
 "preset": "name_preset",
 "system": "None"
}
```
* Параметры json 
1. `login` - указать логин от веб-интерфейса 
2. `pass` - указать пароль 
3. `preset` - указать имя вызываемого пресета 
4. `system` - является приоритетным над `preset` и может принимать значения `None`, `reset` или `reboot` \
-`None` -  игнорировать данный параметр \
-`reset` -  перезапустить все сервисы на сервере \
-`reboot` - перезагрузить сервер

### Пожертвовать на поддержку проекта
[![Ю money](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://yoomoney.ru/fundraise/BipPxgNsYWg.221118)
